home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Game Programming for Dummies (2nd Edition)
/
WinGamProgFD.iso
/
mac
/
DirectX SDK
/
DXSDK
/
samples
/
Multimedia
/
VBSamples
/
Common
/
selectDevice.frm
< prev
Wrap
Text File
|
2001-10-08
|
10KB
|
359 lines
VERSION 5.00
Begin VB.Form frmSelectDevice
BorderStyle = 3 'Fixed Dialog
Caption = "Select Device"
ClientHeight = 2805
ClientLeft = 45
ClientTop = 330
ClientWidth = 5865
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 2805
ScaleWidth = 5865
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Begin VB.Frame optRenderingModeoptRenderingMode
Caption = "Rendering Mode"
Height = 1335
Left = 120
TabIndex = 7
Top = 1320
Width = 4575
Begin VB.ComboBox cboFullScreenMode
Enabled = 0 'False
Height = 315
Left = 2040
Style = 2 'Dropdown List
TabIndex = 10
Top = 720
Width = 2295
End
Begin VB.OptionButton optRenderingMode
Caption = "&Fullscreen mode"
Height = 375
Index = 1
Left = 240
TabIndex = 9
Top = 690
Width = 1455
End
Begin VB.OptionButton optRenderingMode
Caption = "Use desktop &window"
Height = 375
Index = 0
Left = 240
TabIndex = 8
Top = 240
Value = -1 'True
Width = 1815
End
End
Begin VB.CommandButton cmdCancel
Caption = "Cancel"
Height = 375
Left = 4800
TabIndex = 4
Top = 720
Width = 975
End
Begin VB.CommandButton cmdOk
Caption = "OK"
Default = -1 'True
Height = 375
Left = 4800
TabIndex = 3
Top = 240
Width = 975
End
Begin VB.Frame Frame1
Caption = "Rendering device"
Height = 1095
Left = 120
TabIndex = 0
Top = 120
Width = 4575
Begin VB.ComboBox cboDevice
Height = 315
Left = 1440
Style = 2 'Dropdown List
TabIndex = 6
Top = 600
Width = 2775
End
Begin VB.ComboBox cboAdapter
Height = 315
Left = 1440
Style = 2 'Dropdown List
TabIndex = 2
Top = 240
Width = 2775
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "D3D &device:"
Height = 195
Left = 360
TabIndex = 5
Top = 660
Width = 900
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "&Adapter:"
Height = 195
Left = 360
TabIndex = 1
Top = 300
Width = 600
End
End
End
Attribute VB_Name = "frmSelectDevice"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim m_callback As Object
Public Sub SelectDevice(callback As Object)
If callback Is Nothing Then Exit Sub
Set m_callback = callback
Dim dm As D3DDISPLAYMODE
If g_d3dpp.Windowed = 0 Then
m_callback.InvalidateDeviceObjects
D3DUtil_ResetWindowed
m_callback.RestoreDeviceObjects
End If
Me.Show 1
Set m_callback = Nothing
End Sub
Private Sub cboAdapter_Click()
Dim devtype As CONST_D3DDEVTYPE
If (cboDevice.ListIndex = 1) Then
devtype = D3DDEVTYPE_REF
Else
devtype = D3DDEVTYPE_HAL
End If
Call UpdateModes(cboAdapter.ListIndex, devtype)
End Sub
Private Sub cboDevice_Change()
Dim devtype As CONST_D3DDEVTYPE
If (cboDevice.ListIndex = 1) Then
devtype = D3DDEVTYPE_REF
Else
devtype = D3DDEVTYPE_HAL
End If
Call UpdateModes(cboAdapter.ListIndex, devtype)
End Sub
Private Sub cmdCancel_Click()
Set m_callback = Nothing
Unload Me
End Sub
Private Sub cmdOk_Click()
On Local Error Resume Next
Dim bAdapterChanged As Boolean
Dim bRasterizerChanged As Boolean
Dim bRef As Boolean
Dim lWindowed As Long
Dim AdapterID As Long
Dim ModeID As Long
Dim devtype As CONST_D3DDEVTYPE
AdapterID = cboAdapter.ListIndex
ModeID = cboFullScreenMode.ListIndex
' see if user changed adapters
If g_lCurrentAdapter <> AdapterID Then bAdapterChanged = True
bRef = g_Adapters(g_lCurrentAdapter).bReference
If (cboDevice.ListIndex = 1) Then
devtype = D3DDEVTYPE_REF
Else
devtype = D3DDEVTYPE_HAL
End If
' see if user changed rasterizers
If (devtype = D3DDEVTYPE_REF And bRef = False) Then bRasterizerChanged = True
If (devtype = D3DDEVTYPE_HAL And bRef = True) Then bRasterizerChanged = True
If optRenderingMode(1).Value = True Then
lWindowed = 0
Else
lWindowed = 1
End If
' if they didnt change adapters or switch to refrast, then we can just use reset
If bAdapterChanged = False And bRasterizerChanged = False Then
'If trying to go Fullscreen
If lWindowed = 0 Then
'call g_dev.reset
Call D3DUtil_ResizeFullscreen(g_focushwnd, cboFullScreenMode.ListIndex)
Else
Call D3DUtil_ResizeWindowed(g_focushwnd)
End If
'tell user needs to restore device objects
m_callback.RestoreDeviceObjects
'exit modal dialog
Unload Me
Exit Sub
End If
Set g_dev = Nothing
D3DUtil_ReleaseAllTexturesFromPool
'tell user to lose reference counts in its objects device objects
m_callback.InvalidateDeviceObjects
m_callback.DeleteDeviceObjects
'Reinitialize D3D
If lWindowed = 0 Then
D3DUtil_InitFullscreen g_focushwnd, AdapterID, ModeID, devtype, True
Else
D3DUtil_InitWindowed g_focushwnd, AdapterID, devtype, True
End If
If g_dev Is Nothing Then
'The app still hit an error. Both HAL and REF devices weren't created. The app will have to exit at this point.
MsgBox "No suitable device was found to initialize D3D. Application will now exit.", vbCritical
End
Exit Sub
End If
'tell user to re-create device objects
m_callback.InitDeviceObjects
'tell user to restore device objects
m_callback.RestoreDeviceObjects
'exit modal dialog
Unload Me
End Sub
Private Sub Form_Load()
Call UpdateAdapters
Call UpdateDevices(g_lCurrentAdapter)
Call UpdateModes(g_lCurrentAdapter, g_Adapters(g_lCurrentAdapter).DeviceType)
End Sub
Private Sub UpdateAdapters()
Dim i As Long, j As Long
Dim sDescription As String
cboAdapter.Clear
For i = 0 To g_lNumAdapters - 1
sDescription = vbNullString
' For j = 0 To 511
' sDescription = sDescription & Chr$(g_Adapters(i).d3dai.Description(j))
' Next
' sDescription = Replace$(sDescription, Chr$(0), " ")
sDescription = StrConv(g_Adapters(i).d3dai.Description, vbUnicode)
cboAdapter.AddItem sDescription
Next
cboAdapter.ListIndex = g_lCurrentAdapter
End Sub
Private Sub UpdateDevices(adapter As Long)
Dim i As Long
cboDevice.Clear
cboDevice.AddItem "HAL"
cboDevice.AddItem "REF"
'If g_Adapters(g_lCurrentAdapter).bReference Then
If g_Adapters(adapter).bReference Then
cboDevice.ListIndex = 1
Else
cboDevice.ListIndex = 0
End If
End Sub
Private Sub UpdateModes(adapter As Long, devtype As CONST_D3DDEVTYPE)
Dim i As Long
Dim pAdapter As D3DUTIL_ADAPTERINFO
Dim sModeString As String
cboFullScreenMode.Clear
With g_Adapters(adapter).DevTypeInfo(devtype)
For i = 0 To .lNumModes - 1
sModeString = .Modes(i).lWidth & " x "
sModeString = sModeString & .Modes(i).lHeight & " x "
If .Modes(i).format = D3DFMT_X8R8G8B8 Or _
.Modes(i).format = D3DFMT_A8R8G8B8 Or _
.Modes(i).format = D3DFMT_R8G8B8 Then
sModeString = sModeString & "32"
Else
sModeString = sModeString & "16"
End If
cboFullScreenMode.AddItem sModeString
Next
If cboFullScreenMode.ListCount > 0 Then cboFullScreenMode.ListIndex = .lCurrentMode
End With
End Sub
Private Sub optRenderingMode_Click(Index As Integer)
If Index = 1 Then
cboFullScreenMode.Enabled = True
Else
cboFullScreenMode.Enabled = False
End If
End Sub